We have presented the building block folding model. The model postulates that protein folding is a hierarchical top-down process. The basic unit from which a fold is constructed, referred to as a hydrophobic folding unit, is the outcome of combinatorial assembly of a set of "building blocks." Results obtained by the computational cutting procedure yield fragments that are in agreement with those obtained experimentally by limited proteolysis. We proposed a three-stage scheme for the prediction of a protein structure from its sequence. First, the sequence is cut to fragments that are each assigned a structure. Second, the assigned structures are combinatorially assembled to form the overall 3D organization. Third, highly ranked predicted arrangements are completed and refined. As expected, proteins from the same family give very similar building blocks. However, different proteins can also give building blocks that are similar in structure. In such cases the building blocks differ in sequence, stability, contacts with other building blocks, and in their 3D locations in the protein structure. This result, which we have repeatedly observed in many cases, led us to conclude that while a building block is influenced by its environment, nevertheless, it can be viewed as a stand-alone unit. With this conclusion in hand, it is possible to develop an algorithm that predicts the building block assignment of a protein sequence whose structure is unknown. Toward this goal, we have created a sequentially nonredundant database of building block sequences. A protein sequence can be aligned against these, in order to be matched to a set of potential building blocks. To address the first step, we have developed an assignment algorithm that selects optimal combinations to "cover" the protein sequence. Our results include proteins from different classes, with building blocks that are not necessarily assigned from the same protein class. These results are encouraging, indicating that folding by parts and part assembly may contribute to further progress in the protein-folding problem. Toward the second step of this scheme, we developed CombDock, a combinatorial docking algorithm. CombDock gets an ordered set of protein sub-structures and predicts their overall organization. We reduce the combinatorial assembly to a graph-theory problem, and give a heuristic polynomial solution to this computationally hard problem. We tested CombDock using increasingly distorted input, where the native structural units were replaced by similarly folded units extracted from homologous proteins and, in the more difficult cases, from globally unrelated proteins. The algorithm is robust, showing low sensitivity to input distortion. Utilizing concepts of protein building blocks, we proposed a de novo computational algorithm that is similar to combinatorial shuffling experiments. Our goal is to engineer naturally occurring folds with low homology to existing proteins. A selected protein is first partitioned into its building blocks. The building blocks are substituted by fragments taken from other proteins with overall low sequence identity, but with a similar hydrophobic/hydrophilic pattern and a high structural similarity. The stabilities of the engineered proteins are tested by explicit water molecular dynamics simulations. The key in the design is using relatively stable fragments, with a high population time. We adopt a related (modified) strategy in nanodesign.our goal is to carry out nanotube design using naturally occurring protein building blocks. We pick the nanotube geometry. Given this target geometry, our goal is to scan a library of candidate building block parts, combinatorially assembling them into the shape and testing the stability.